1 package edu.jiangxin.apktoolbox.file.password.recovery.checker; 2 3 import org.apache.commons.io.FilenameUtils; 4 import org.apache.poi.POIDocument; 5 import org.apache.poi.hslf.usermodel.HSLFSlideShow; 6 import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; 7 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 8 import org.apache.poi.hwpf.HWPFDocument; 9 import org.apache.poi.poifs.filesystem.POIFSFileSystem; 10 11 import java.io.*; 12 13 public class BinaryOfficeChecker extends FileChecker { 14 private static final boolean DEBUG = true; 15 16 public BinaryOfficeChecker() { 17 super(); 18 } 19 20 @Override 21 public String[] getFileExtensions() { 22 return new String[]{"doc", "ppt", "xls"}; 23 } 24 25 @Override 26 public String getFileDescription() { 27 return "*.doc;*.ppt;*.xls"; 28 } 29 30 @Override 31 public String getDescription() { 32 return "Office File Checker(Binary formats)"; 33 } 34 35 @Override 36 public boolean prepareChecker() { 37 return true; 38 } 39 40 @Override 41 public boolean checkPassword(String password) { 42 if (DEBUG) { 43 logger.info("checkPassword: " + password); 44 } 45 46 boolean result = false; 47 Biff8EncryptionKey.setCurrentUserPassword(password); 48 try (FileInputStream fis = new FileInputStream(file); 49 POIFSFileSystem pfs = new POIFSFileSystem(fis)) { 50 String extension = FilenameUtils.getExtension(file.getName()); 51 switch (extension) { 52 case "xls" -> { 53 try (POIDocument poiDocument = new HSSFWorkbook(pfs)) { 54 logger.info("create workbook successfully: {}", poiDocument); 55 result = true; 56 } 57 } 58 case "doc" -> { 59 try (POIDocument poiDocument = new HWPFDocument(pfs)) { 60 logger.info("create document successfully: {}", poiDocument); 61 result = true; 62 } 63 } 64 case "ppt" -> { 65 try (POIDocument poiDocument = new HSLFSlideShow(pfs)) { 66 logger.info("create slideShow successfully: {}", poiDocument); 67 result = true; 68 } 69 } 70 default -> logger.error("Not supported: {}", file.getName()); 71 } 72 } catch (Exception e) { 73 if (DEBUG) { 74 logger.error("checkPassword: {}", e.getClass()); 75 } 76 } 77 return result; 78 } 79 }